/*!
 * \file WtMsgQue.h
 * \project	WonderTrader
 *
 * \author Wesley
 * \date 2020/03/30
 * 
 * \brief 消息队列模块C接口定义
 * 
 * \details 本文件定义了WonderTrader消息队列系统的C语言接口：
 *          - 提供基于UDP的消息发布订阅功能
 *          - 支持消息服务器和客户端的创建管理
 *          - 实现主题订阅和消息广播机制
 *          - 提供跨语言调用的C接口封装
 *          - 支持异步消息处理和回调通知
 *          - 适用于分布式系统间的消息通信
 */
#pragma once
#include "PorterDefs.h"

#ifdef __cplusplus
extern "C"
{
#endif
	/**
	 * @brief 注册回调函数
	 * @details 注册日志回调函数，用于接收消息队列系统的日志信息
	 * @param cbLog 日志回调函数指针
	 */
	EXPORT_FLAG void		regiter_callbacks(FuncLogCallback cbLog);

	/**
	 * @brief 创建消息服务器
	 * @details 创建UDP消息服务器，用于发布消息到指定主题
	 * @param url 服务器URL地址（格式：udp://ip:port）
	 * @param confirm 是否需要确认机制
	 * @return WtUInt32 服务器ID，用于后续操作标识
	 */
	EXPORT_FLAG WtUInt32	create_server(const char* url, bool confirm);
	
	/**
	 * @brief 销毁消息服务器
	 * @details 销毁指定ID的消息服务器，释放相关资源
	 * @param id 服务器ID
	 */
	EXPORT_FLAG void		destroy_server(WtUInt32 id);
	
	/**
	 * @brief 发布消息
	 * @details 向指定主题发布消息数据
	 * @param id 服务器ID
	 * @param topic 消息主题
	 * @param data 消息数据指针
	 * @param dataLen 消息数据长度
	 */
	EXPORT_FLAG void		publish_message(WtUInt32 id, const char* topic, const char* data, WtUInt32 dataLen);

	/**
	 * @brief 创建消息客户端
	 * @details 创建UDP消息客户端，用于订阅和接收消息
	 * @param url 服务器URL地址（格式：udp://ip:port）
	 * @param cb 消息回调函数，用于处理接收到的消息
	 * @return WtUInt32 客户端ID，用于后续操作标识
	 */
	EXPORT_FLAG WtUInt32	create_client(const char* url, FuncMQCallback cb);
	
	/**
	 * @brief 销毁消息客户端
	 * @details 销毁指定ID的消息客户端，释放相关资源
	 * @param id 客户端ID
	 */
	EXPORT_FLAG void		destroy_client(WtUInt32 id);
	
	/**
	 * @brief 订阅主题
	 * @details 订阅指定主题的消息，只有订阅的主题消息才会被接收
	 * @param id 客户端ID
	 * @param topic 要订阅的主题名称
	 */
	EXPORT_FLAG void		subscribe_topic(WtUInt32 id, const char* topic);
	
	/**
	 * @brief 启动客户端
	 * @details 启动消息客户端，开始接收消息
	 * @param id 客户端ID
	 */
	EXPORT_FLAG void		start_client(WtUInt32 id);
#ifdef __cplusplus
}
#endif